package visao;

import java.util.List;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

public abstract class TabelaModelo<T> implements TableModel {

    protected List<T> linhas;
    private String[] colunas;
    private JTable tabela;

    public TabelaModelo(List<T> linhas, String[] colunas, JTable tabela) {

        this.linhas = linhas;
        this.colunas = colunas;
        this.tabela = tabela;
        tabela.setModel(this);

    }

    public T getObjetoSelecionado() {

        int indiceSelecionado = tabela.getSelectedColumn();

        if (indiceSelecionado >= 0) {

            return linhas.get(indiceSelecionado);

        } else {

            return null;

        }
    }

    public int getRowCount() {
        return linhas.size();
    }

    public int getColumnCount() {
        return colunas.length;
    }

    public T getObjetoPorIndice(int indiceLinha) {
        return linhas.get(indiceLinha);

    }

    public String getColumnName(int columnIndex) {
        return colunas[columnIndex];
    }

    public Class<?> getColumnClass(int columnIndex) {
        return colunas[columnIndex].getClass();
    }

    public void addTableModelListener(TableModelListener l) {
    }

    public void removeTableModelListener(TableModelListener l) {
    }

    public abstract Object getValueAt(int indiceLinha, int indiceColuna);

    public abstract boolean isCellEditable(int indiceLinha, int indiceColuna);

    public abstract void setValueAt(Object valor, int indiceLinha, int indiceColuna);
}

